From: Carlos Garnacho Date: Thu, 7 May 2020 09:15:46 +0000 (+0200) Subject: windowManager: Handle return value/errors from systemd unit calls X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~684^2^2~413 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=0ecddafc2072e7bd9a0b03f11e71ddd5abd8e526;p=gnome-shell.git windowManager: Handle return value/errors from systemd unit calls These may produce errors, and return a value indicating we should proceed further. Check for those when starting/stopping gsd-xsettings. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1238 https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2755 --- diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index ffbec6d83..14c914099 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -900,35 +900,45 @@ var WindowManager = class { global.display.connect('init-xserver', (display, task) => { IBusManager.getIBusManager().restartDaemon(['--xim']); - Shell.util_start_systemd_unit('gsd-xsettings.target', 'fail'); - - /* Leave this watchdog timeout so don't block indefinitely here */ - let timeoutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 5, () => { - Gio.DBus.session.unwatch_name(watchId); - log('Warning: Failed to start gsd-xsettings'); - task.return_boolean(true); - timeoutId = 0; - return GLib.SOURCE_REMOVE; - }); - /* When gsd-xsettings daemon is started, we are good to resume */ - let watchId = Gio.DBus.session.watch_name( - 'org.gnome.SettingsDaemon.XSettings', - Gio.BusNameWatcherFlags.NONE, - () => { - Gio.DBus.session.unwatch_name(watchId); - if (timeoutId > 0) { + try { + if (Shell.util_start_systemd_unit('gsd-xsettings.target', 'fail')) { + /* Leave this watchdog timeout so don't block indefinitely here */ + let timeoutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 5, () => { + Gio.DBus.session.unwatch_name(watchId); + log('Warning: Failed to start gsd-xsettings'); task.return_boolean(true); - GLib.source_remove(timeoutId); - } - }, - null); + timeoutId = 0; + return GLib.SOURCE_REMOVE; + }); + + /* When gsd-xsettings daemon is started, we are good to resume */ + let watchId = Gio.DBus.session.watch_name( + 'org.gnome.SettingsDaemon.XSettings', + Gio.BusNameWatcherFlags.NONE, + () => { + Gio.DBus.session.unwatch_name(watchId); + if (timeoutId > 0) { + task.return_boolean(true); + GLib.source_remove(timeoutId); + } + }, + null); + } + } catch (e) { + log('Error starting gsd-xsettings: %s'.format(e.message)); + } + return true; }); global.display.connect('x11-display-closing', () => { if (!Meta.is_wayland_compositor()) return; - Shell.util_stop_systemd_unit('gsd-xsettings.target', 'fail'); + try { + Shell.util_stop_systemd_unit('gsd-xsettings.target', 'fail'); + } catch (e) { + log('Error stopping gsd-xsettings: %s'.format(e.message)); + } IBusManager.getIBusManager().restartDaemon(); });